#include <stdio.h>
/*

| 指针类型  | 步长（32位） | 步长（64位） | 典型应用场景      |
| --------- | ------------ | ------------ | ----------------- |
| `char*`   | 1字节        | 1字节        | 字符串处理        |
| `int*`    | 4字节        | 4字节        | 整型数组操作      |
| `float*`  | 4字节        | 4字节        | 浮点数据处理      |
| `double*` | 8字节        | 8字节        | 高精度计算        |
| `void*`   | 不可运算     | 不可运算     | 泛型编程/内存拷贝 |

*/

/*
步长
    指针运算的基本单位
*/

int main(int argc, char const *argv[])
{
    // 如果指针初始化的时候 没有指向的对象 则直接指向空
    int * prt = NULL;
    

    // 关于步长
    char ch[2] = {'a'};
    char * ch_ptr = ch;

    printf("ch_ptr = %p\n" , ch_ptr);
    printf("ch_ptr++ = %p\n" , ch_ptr + 1);
    printf("ch_ptr - (++ch_ptr) = %ld\n" , ch_ptr - (ch_ptr + 1));
    /*   步长  就是 1 字节
    ch_ptr = 0x7fff29195226
    ch_ptr++ = 0x7fff29195227
    */

    int in[2] = {0};
    int * in_ptr = in;

    printf("in_ptr = %p\n" , in_ptr);
    printf("in_ptr++ = %p\n" , in_ptr + 1);
    printf("in_ptr - (++in_ptr) = %ld\n" , in_ptr - (in_ptr + 1));
    /*  步长  就是 4 字节
    ch_ptr = 0x7ffeef3f2e7c
    ch_ptr++ = 0x7ffeef3f2e80
    */


    double dou[2] = {0};
    double * do_ptr = dou;

    printf("ch_ptr = %p\n" , do_ptr);
    printf("ch_ptr++ = %p\n" , do_ptr + 1);
    printf("do_ptr - (++do_ptr) = %ld\n" , do_ptr - (do_ptr + 1));
    /*  步长  就是 4 字节
    ch_ptr = 0x7ffc263e81a0
    ch_ptr++ = 0x7ffc263e81a8
    */

    return 0;
}
